<!--
  Copyright JS Foundation and other contributors, http://js.foundation

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<script type="text/html" data-help-name="split">
  <p>
    Разбивает сообщение на последовательность сообщений.
  </p>

  <h3>Принимает</h3>
  <dl class="message-properties">
    <dt>payload<span class="property-type">объект | строка | массив | буфер</span></dt>
    <dd>Поведение узла определяется типом <code>msg.payload</code>:
      <ul>
        <li><b>строка</b>/<b>буфер</b> - сообщение разделяется с помощью указанного символа (по умолчанию: <code>\n</code>), последовательности буфера или по фиксированной длине.</li>
        <li><b>массив</b> - сообщение разбивается на отдельные элементы массива или массивы фиксированной длины.</li>
        <li><b>объект</b> - сообщение отправляется для каждой пары ключ/значение объекта.</li>
      </ul>
    </dd>
  </dl>

  <h3>Выводит</h3>
  <dl class="message-properties">
    <dt>parts<span class="property-type">объект</span></dt>
    <dd>Это свойство содержит информацию о том, как сообщение было отделено от исходного сообщения. При передаче на узел <b>join</b> последовательность может быть собрана обратно в одно сообщение. Объект содержит следующие свойства:
      <ul>
        <li><code>id</code> - идентификатор группы сообщений</li>
        <li><code>index</code> - позиция в группе</li>
        <li><code>count</code> - если известно, общее количество сообщений в группе. Смотрите 'потоковый режим' ниже.</li>
        <li><code>type</code> - тип сообщения: строка = string; массив = array; объект = object; буфер = buffer</li>
        <li><code>ch</code> - для строки или буфера данные, использованные для разделения сообщения, в виде строки или массива байтов</li>
        <li><code>key</code> - для объекта - ключ свойства, из которого было создано это сообщение. Узел также может быть сконфигурирован для копирования этого значения в другие свойства сообщения, такие как <code>msg.topic</code>.</li>
        <li><code>len</code> - длина каждого сообщения при разделении с использованием значения фиксированной длины</li>
      </ul>
    </dd>
  </dl>

  <h3>Подробности</h3>
  <p>
    Этот узел облегчает создание потока, который выполняет общие действия над последовательностью сообщений, перед тем как с помощью узла <b>join</b> объединить последовательность обратно в одно сообщение.
  </p>
  <p>
    Он использует свойство <code>msg.parts</code> для отслеживания отдельных частей последовательности.
  </p>

  <h4>Потоковый режим</h4>
  <p>
    Узел также может использоваться для переформатирования потока сообщений. Например, последовательное устройство, которое отправляет завершенные новой строкой команды, может доставлять одно сообщение с частичной командой в конце. В 'потоковом режиме' этот узел будет разбивать сообщение и отправлять каждый завершенный сегмент. Если в конце есть частичный сегмент, узел удержит его и добавит к следующему полученному сообщению.
  </p>
  <p>
    При работе в этом режиме узел не будет устанавливать свойство <code>msg.parts.count</code>, так как он не знает, сколько сообщений ожидать в потоке. Это означает, что его нельзя использовать вместе с узлом <b>join</b> в его автоматическом режиме.
  </p>
</script>

<script type="text/html" data-help-name="join">
  <p>
    Объединяет последовательности сообщений в одно сообщение.
  </p>
  <p>
    Доступны три режима:
  </p>
  <dl>
    <dt>автоматический</dt>
    <dd>При использовании с узлом <b>split</b> он автоматически объединит сообщения, чтобы восстановить структуру сообщения, которая была до разделения.</dd>
    <dt>ручной</dt>
    <dd>Объединяет последовательности сообщений различными способами.</dd>
    <dt>агрегация последовательности</dt>
    <dd>Применяет JSONata-выражение ко всем сообщениям в последовательности, чтобы свести его к одному сообщению.</dd>
  </dl>

  <h3>Принимает</h3>
  <dl class="message-properties">
    <dt class="optional">parts<span class="property-type">объект</span></dt>
    <dd>Чтобы автоматически соединить последовательность сообщений, у них всех должно быть установлено это свойство. Узел <b>split</b> генерирует это свойство, но его можно создать вручную. Оно имеет следующие свойства:
      <ul>
        <li><code>id</code> - идентификатор группы сообщений</li>
        <li><code>index</code> - позиция в группе</li>
        <li><code>count</code> - общее количество сообщений в группе</li>
        <li><code>type</code> - тип сообщения: строка = string; массив = array; объект = object; буфер = buffer</li>
        <li><code>ch</code> - для строки или буфера данные, использованные для разделения сообщения, в виде строки или массива байтов</li>
        <li><code>key</code> - для объекта - ключ свойства, из которого было создано это сообщение</li>
        <li><code>len</code> - длина каждого сообщения при разделении с использованием значения фиксированной длины</li>
      </ul>
    </dd>
    <dt class="optional">complete</dt>
    <dd>
      Если установлено, узел добавит payload, а затем отправит выходное сообщение в своем текущем состоянии. Если вы не хотите добавлять payload, удалите его из msg.
    </dd>
  </dl>

  <h3>Подробности</h3>
  <h4>Автоматический режим</h4>
  <p>
    В автоматическом режиме используется свойство <code>parts</code> входящих сообщений, чтобы определить способ объединения последовательности. Это позволяет автоматически выполнять обратное действие для узла <b>split</b>.
  </p>

  <h4>Ручной режим</h4>
  <p>
    Когда узел настроен на соединение в ручном режиме, он может объединять последовательности сообщений в различные результаты:
  </p>
  <ul>
    <li><b>строка</b> или <b>буфер</b> - создается путем объединения выбранного свойства каждого сообщения с указанными символами соединения или буфером.</li>
    <li><b>массив</b> - создается путем добавления каждого выбранного свойства или всего сообщения в выходной массив.</li>
    <li><b>объект ключей/значений</b> - создается с использованием свойства каждого сообщения для определения ключа, под которым хранится требуемое значение.</li>
    <li><b>слитый объект</b> - создается путем объединения свойства каждого сообщения в один объект.</li>
  </ul>
  <p>
    Другие свойства исходящего сообщения берутся из последнего сообщения, полученного перед отправкой результата.
  </p>
  <p>
    Свойство <i>кол-во</i> может быть установлено для количества сообщений, которое должно быть получено перед генерацией выходного сообщения. Для выходных данных объекта, когда это число достигнуто, узел может быть настроен на отправку сообщения для каждого последующего полученного сообщения.
  </p>
  <p>
    Свойство <i>время (сек)</i> может быть установлено, чтобы инициировать отправку нового сообщения с использованием всего, что было получено до сих пор.
  </p>
  <p>
    Если сообщение получено с установленным свойством <code>msg.complete</code>, выходное сообщение завершается и отправляется. Это сбрасывает любой подсчет частей.
  </p>
  <p>
    Если сообщение получено с установленным свойством <code>msg.reset</code>, частично завершенное сообщение удаляется и не отправляется. Это сбрасывает любой подсчет частей.
  </p>

  <h4>Режим агрегации последовательности</h4>
  <p>
    Когда настроено объединение в режиме агрегирования, выражение применяется к каждому сообщению в последовательности, и результат накапливается для создания одного сообщения.
  </p>

  <dl class="message-properties">
    <dt>Начальное значение</dt>
    <dd>Начальное значение накопленного значения (<code>$A</code>).</dd>
    <dt>Агрегирующее выражение</dt>
    <dd>Выражение JSONata, которое вызывается для каждого сообщения в последовательности. Результат передается следующему вызову выражения как накопленное значение. В выражении могут использоваться следующие специальные переменные:
      <ul>
        <li><code>$A</code>: накопленное значение, </li>
        <li><code>$I</code>: индекс сообщения в последовательности, </li>
        <li><code>$N</code>: количество сообщений в последовательности.</li>
      </ul>
    </dd>
    <dt>Исправляющее выражение</dt>
    <dd>Необязательное выражение JSONata, которое применяется после того, как агрегирующее выражение было применено ко всем сообщениям в последовательности. В выражении могут использоваться следующие специальные переменные:
      <ul>
        <li><code>$A</code>: накопленное значение, </li>
        <li><code>$N</code>: количество сообщений в последовательности.</li>
      </ul>
    </dd>
    <p>
      По умолчанию агрегирующее выражение применяется по порядку, от первого до последнего сообщения последовательности. При желании его можно применять в обратном порядке.
    </p>
  </dl>
  <p>
    <b>Пример:</b> следующие параметры, при получении последовательности числовых значений, рассчитывают среднее значение:
    <ul>
      <li><b>Агрегирующее выражение</b>: <code>$A+payload</code></li>
      <li><b>Начальное значение</b>: <code>0</code></li>
      <li><b>Исправляющее выражение</b>: <code>$A/$N</code></li>
    </ul>
  </p>

  <h4>Хранение сообщений</h4>
  <p>
    Этот узел будет буферизировать сообщения внутри, чтобы работать между последовательностями. Параметр <code>nodeMessageBufferMaxLength</code> можно использовать для ограничения количества сообщений, которые узел будут буферизовать.
  </p>
</script>
